#include<iostream>

const int QueueSize=10;
class ArrayQueue
{
    public:
        ArrayQueue():front(0),rear(0){}
        //入队列(尾插)
        void Push(const int &element)
        {
            if((rear+1)%QueueSize==front)
            {
                return;
            } 
            a[rear++]=element;
            rear%=QueueSize;//成环
        }
        //出队列（头删）
        void Pop()
        {
            if(front==rear)//队列满条件：rear 和front中间人为空出一个元素，区分队列满和队列空
            {
                 std::cout<<"队列空"<<std::endl;
                return;
            }
            front++;
            front%=QueueSize;//成环
        }
        int* GetFront()//取对头元素
        {
              if((rear+1)%QueueSize==front)
            {
                 std::cout<<"队列满"<<std::endl;
                return nullptr;
            }
            return &a[front];
        }
        bool IsEmpty()
        {
           return front==rear;
        }

private:
    int a[QueueSize];
    int front;//队头指针
    int rear;//队尾指针
};



int main()
{
    ArrayQueue q;
    for(int i=0;i<10;i++)
    {
        q.Push(i+1);
    }
    while(q.IsEmpty()==false)
    {
        std::cout<<*q.GetFront()<<" ";
        q.Pop();
    }
    std::cout<<std::endl;

    q.Push(1);
    while(q.IsEmpty()==false)
    {
         std::cout<<*q.GetFront()<<" ";
        q.Pop();
    }
     std::cout<<std::endl;

    return 0;
}